En Elixir, los procesos son de corta duración por defecto; una vez que una función termina, el proceso finaliza. Para crear un proceso persistente con estado, utilizamos la recursión para mantener el proceso activo en un bucle.
1. Optimización de Llamadas por Cola (TCO)
Si la acción final absoluta de una función es llamarse a sí misma, la máquina virtual de Erlang (BEAM) realiza Optimización de Llamadas por Cola. En lugar de añadir un nuevo marco a la pila, simplemente salta de nuevo al inicio de la función con nuevos argumentos.
def factorial(n), do: n * factorial(n-1) # NO TCO
2. Estado Persistente
El estado se mantiene pasando valores actualizados como argumentos a la llamada recursiva. Debido a la TCO, estos argumentos reemplazan los parámetros originales en la pila sin consumir memoria adicional, permitiendo que los bucles se ejecuten indefinidamente.